home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / dosint.arc / DOSINT.TXT
Text File  |  1986-05-11  |  58KB  |  1,616 lines

  1.  1-Aug-85 22:07:23-PDT,58657;000000000001
  2. From: "Ross M. Greenberg" <greenber%timeinc.uucp@brl>
  3. Subject: List of DOS Interrupts
  4. Date: 29 Jul 85 23:03:59 GMT
  5. To: INFO-IBMPC@USC-ISIB.ARPA
  6.  
  7.  
  8.  
  9. ==========================================================================
  10.  
  11.         Interrupt List for MS-DOS (2.xx only)
  12.                 (With some notes on Dos 3.xx) 
  13.  
  14.          Additions and corrections to Bob Jack's SANYO-oriented 
  15.          file describing the INT structure. Includes list of all 
  16.          undocumented INT21 functions and for most tells what they 
  17.          do.
  18.      
  19.      
  20.        - - - Interrupt Structure - - -
  21.     Orginal work       Janet Jack   January 1985
  22.     Corrections & additions J. Weaver Jr.  January 1985
  23.     Addition  John Cooper   February 1985
  24.     Addition  Skip Gilbrech  February 1985
  25.     Corrections & additions Bob Jack
  26.     Ongoing Additions and Cxns Jim Kyle  April 1985
  27.     Recent Additions and Corrections:        (7/25/85)
  28.         John Ruschmeyer (...!ihnp4!vax135!petsd!moncol!john)
  29.         Bill Frolik (...!ihnp4!hplabs!hp-pcd!bill)
  30.             Ross M. Greenberg (...!ihnp4!timeinc!greenber)
  31.  
  32.  
  33. -----------------------------------------------------------
  34.  INT 0 - DIVIDE ERROR
  35.     Automatically called at end of DIV or IDIV operation
  36.  that results in error. Normally set by DOS to display an error
  37.  message and abort the program.
  38.  -----------------------------------------------------------
  39.  INT 1 - SINGLE-STEP
  40.     Generated at end of each machine instruction if
  41.  TF bit in FLAGS is set. This is what makes the T command
  42.  of DEBUG work for single-stepping. Is not generated after
  43.  MOV to segment register or POP of segment register.
  44.  -----------------------------------------------------------
  45.  INT 2 - NMI (Non Maskable Interrupt)
  46.     Generated by NMI signal in hardware. Used in IBM for
  47.  memory parity error trapping.
  48.  -----------------------------------------------------------
  49.  INT 3 - 1-BYTE INTERRUPT
  50.     Generated by opcode 0CCh. Similar to 8080's RST
  51.  instruction. Generally used to set breakpoints for DEBUG.
  52.  -----------------------------------------------------------
  53.  INT 4 - OVERFLOW
  54.     Generated by INTO instruction if OF flag is set. If
  55.  flag is not set, INTO is effectively a NOP. Used to trap any
  56.  arithmetic errors when program is ready to handle them rather
  57.  than immediately when they occur.
  58.  -----------------------------------------------------------
  59.  INT 5 - Print-Screen Key
  60.     Automatically called by keyboard scan when print-
  61.  screen key is pressed. Normally executes routine to print
  62.  the screen, but may call any routine that can safely be
  63.  executed from inside the keyboard scanner.
  64.     Status and result byte at address 0050:0000.
  65.  -----------------------------------------------------------
  66.  INT 6 - UNKNOWN
  67.  -----------------------------------------------------------
  68.  INT 7 - UNKNOWN
  69.  -----------------------------------------------------------
  70.  INT 8 thru 0FH - Vectored Hardware Lines (in IBM at least)
  71.     In IBM, these 8 interrupts are generated in
  72.  response to IRQ 0 through IRQ 7 (if enabled via port 21).
  73.     IRQ0    -    Timer interrupt
  74.     IRQ1    -    Keyboard interrupt
  75.     IRQ4    -    serial controller
  76.     IRQ6    -    diskette interrupt
  77.     IRQ7    -    PPI interrupt
  78.  -----------------------------------------------------------
  79. INT 10 - VIDEO - SET VIDEO MODE
  80.     REG AH = 0
  81.     REG AL = 0 = 40x25 B&W
  82.              1 = 40x25 COLOR
  83.              2 = 80x25 BW
  84.              3 = 80x25 COLOR
  85.              4 = 320x200 GRAPHICS, 4 COLOR
  86.              5 = 320x200 GRAPHICS, 4 GREY
  87.              6 = 640x200 GRAPHICS, B&W
  88.              7 = MONOCHROME GRAPHICS MODE
  89.              8 = 160x200 GRAPHICS, 16 COLOR
  90.              9 = 320x200 GRAPHICS, 16 COLOR
  91.              A = 640x200 GRAPHICS, 4 COLOR
  92.  
  93.     Note: Modes 8-10 are only available on the PCjr (and
  94.           Tandy 1000).
  95. -----------------------------------------------------------
  96.  INT 10 - VIDEO - SET CURSOR CHARACTERISTICS
  97.      REG AH = 1
  98.      REG CH = bit values:
  99.          bits 5-6 = blink attribute
  100.                   (00=normal, 01=invis., 11=fast)
  101.          bits 0-4 = start line for cursor in char. cell
  102.      REG CL = bit values:
  103.          bits 0-4 = end line for cursor in char. cell
  104.  -----------------------------------------------------------
  105.  INT 10 - VIDEO - SET CURSOR POSITION
  106.     REG AH = 2
  107.     REG DH,DL = ROW,COLUMN - 0,0 = UPPER LEFT
  108.     REG BH = PAGE NO. - 0 = GRAPHICS
  109.  -----------------------------------------------------------
  110.  INT 10 - VIDEO - READ CURSOR POSITION
  111.     REG AH = 3
  112.     REG BH = PAGE NO. - 0 = GRAPHICS
  113.     ON EXIT:
  114.        REG DH,DL = ROW,COLUMN
  115.        REG CH,CL = CURSOR MODE,CURRENT SET
  116.  -----------------------------------------------------------
  117.  INT 10 - VIDEO - READ LIGHT PEN POSITION
  118.     REG AH = 4
  119.     ON EXIT:
  120.        REG AH = 0: light pen switch not activated
  121.            AH = 1: light pen values in registers
  122.               DH = row of current position
  123.               DL = column of current position
  124.               CH = raster line (0-199)
  125.               BX = pixel column (0-319 or 0-639)
  126.  -----------------------------------------------------------
  127.  INT 10 - VIDEO - SELECT DISPLAY PAGE
  128.     REG AH = 5
  129.     REG AL = 0 - 7: NEW PAGE VALUE FOR MODES 0 & 1
  130.              0 - 3: NEW PAGE VALUE FOR MODES 2 & 3
  131.              80H: READ CRT/CPU PAGE REGISTERS
  132.              81H: SET CPU PAGE REGISTER TO VALUE IN BL
  133.              82H: SET CRT PAGE REGISTER TO VALUE IN BH
  134.              83H: SET BOTH DISPLAY REGISTERS
  135.      ON EXIT:
  136.         REG BH = CRT PAGE REGISTER
  137.             BL = CPU PAGE REGISTER
  138.  -----------------------------------------------------------
  139.  INT 10 - VIDEO - SCROLL PAGE UP
  140.     REG AH = 6
  141.     REG AL = NO. OF LINES BLANKED AT BOTTOM OF PAGE
  142.         0 = BLANK WINDOW
  143.     REG BH = ATTRIBUTES TO BE USED ON BLANK LINE
  144.     WINDOW:
  145.        REG CH,CL = UPPER LEFT CORNER
  146.        REG DH,DL = LOWER RIGHT CORNER
  147.  -----------------------------------------------------------
  148.  INT 10 - VIDEO - SCROLL PAGE DOWN
  149.     REG AH = 7
  150.     REG AL = NO. OF LINES BLANKED AT TOP OF PAGE
  151.         0 = BLANK WINDOW
  152.     REG BH = ATTRIBUTES TO BE USED ON BLANK LINE
  153.     WINDOW:
  154.        REG CH,CL = UPPER LEFT CORNER
  155.        REG DH,DL = LOWER RIGHT CORNER
  156.  -----------------------------------------------------------
  157.  INT 10 - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION
  158.     REG AH = 8
  159.     REG BH = DISPLAY PAGE
  160.     ON EXIT:
  161.        REG AL = CHAR
  162.        REG AH = ATTRIBUTE OF CHAR - ALPHA MODE
  163.  -----------------------------------------------------------
  164.  INT 10 - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POS
  165.     REG AH = 9
  166.     REG AL = CHARACTER
  167.     REG BH = DISPLAY PAGE - ALPHA MODE
  168.     REG BL = ATTRIBUTES OF CHAR
  169.     REG CX = NO. OF CHAR TO WRITE
  170.  -----------------------------------------------------------
  171.  INT 10 - VIDEO - WRITE CHARACTERS ONLY AT CURSOR POS
  172.     REG AH = 0AH
  173.     REG AL = CHARACTER
  174.     REG BH = DISPLAY PAGE - ALPHA MODE
  175.     REG BL = COLOR OF CHARACTER (GRAPHICS MODE)
  176.     REG CX = NO. OF CHAR TO WRITE
  177.  -----------------------------------------------------------
  178.  INT 10 - SET COLOR PALETTE
  179.     REG AH = 0BH
  180.     REG BH = PALETTE COLOR ID
  181.     REG BL = COLOR TO BE USED W/COLOR ID
  182.  -----------------------------------------------------------
  183.  INT 10 - WRITE DOT ON SCREEN
  184.     REG AH = 0CH
  185.     REG AL = COLOR OF DOT
  186.     REG DX = ROW (0000 - 00C7)
  187.     REG CX = COLUMN (0000 - 027F)
  188.     NOTE:     VIDEO MODES 6 & 7 ONLY
  189.  -----------------------------------------------------------
  190.  INT 10 - READ DOT ON SCREEN
  191.     REG AH = 0DH
  192.     REG CX = COLUMN (0000 - 027F)
  193.     REG DX = ROW (0000 - 00C7)
  194.     ON RETURN:
  195.        REG AL = COLOR READ
  196.  -----------------------------------------------------------
  197.  INT 10 - WRITE CHARACTER - ADVANCE CURSOR (TTY WRITE)
  198.     REG AH = 0EH
  199.     REG AL = CHARACTER
  200.     REG BL = FOREGROUND COLOR (VIDEO MODES 6 & 7 ONLY)
  201.  -----------------------------------------------------------
  202.  INT 10 - GET CURRENT VIDEO MODE
  203.     REG AH = 0FH
  204.     ON RETURN:
  205.        REG AH = # OF COLUMNS ON SCREEN
  206.        REG AL = CURRENT VIDEO MODE
  207.        REG BH = CURRENT ACTIVE DISPLAY PAGE
  208.  -----------------------------------------------------------
  209.  INT 10 - SET PALETTE REGISTERS (PCjr AND TANDY 1000)
  210.     REG AH = 10H
  211.         AL = 0: SET PALETTE REGISTER
  212.                 BL = PALETTE REGISTER TO SET
  213.                 BH = COLOR VALUE TO STORE
  214.         AL = 1: SET BORDER COLOR REGISTER
  215.                 BH = COLOR VALUE TO STORE
  216.         AL = 2: SET ALL PALETTE REGISTERS
  217.                 ES:DX = POINTER TO 17-BYTE LIST
  218.                   BYTES 0-15 = VALUES FOR PALETTE REGS. 0-15
  219.                   BYTE 16 = VALUE FOR BORDER REGISTER
  220.  -----------------------------------------------------------
  221.  INT 10 - WRITE STRING, DON'T MOVE CURSOR (PC/AT ONLY)
  222.     REG AH = 13H
  223.         AL = 0
  224.     BL = ATTRIBUTE
  225.     BH = DISPLAY PAGE NUMBER
  226.     DX = STARTING CURSOR POSITION
  227.     CX = LENGTH OF STRING
  228.     ES:BP = POINTER TO START OF STRING
  229.  -----------------------------------------------------------
  230.  INT 10 - WRITE STRING, MOVE CURSOR AFTER STRING (PC/AT ONLY)
  231.     REG AH = 13H
  232.     AL = 1
  233.     BL = ATTRIBUTE
  234.     BH = DISPLAY PAGE NUMBER
  235.     DX = STARTING CURSOR POSITION
  236.     CX = LENGTH OF STRING
  237.     ES:BP = POINTER TO START OF STRING      
  238.  -----------------------------------------------------------
  239.  INT 10 - WRITE STRING OF ALTERNATING CHARACTERS, ATTRIBUTES;
  240.           DON'T MOVE CURSOR                (PC/AT ONLY)
  241.     REG AH = 13H
  242.     AL = 2
  243.     BH = DISPLAY PAGE NUMBER
  244.     DX = STARTING CURSOR POSITION
  245.     CX = LENGTH OF STRING
  246.     ES:BP = POINTER TO START OF STRING      
  247.  -----------------------------------------------------------
  248.  INT 10 - WRITE STRING OF ALTERNATING CHARACTERS, ATTRIBUTES;
  249.           MOVE CURSOR                (PC/AT ONLY)
  250.     REG AH = 13H
  251.     AL = 3
  252.     BH = DISPLAY PAGE NUMBER
  253.     DX = STARTING CURSOR POSITION
  254.     CX = LENGTH OF STRING
  255.     ES:BP = POINTER TO START OF STRING      
  256.  -----------------------------------------------------------
  257.  INT 10 - GET VIDEO RAM ADDRESS
  258.     REG AH = 70H
  259.     ON RETURN:
  260.        REG  AX  = SEGMENT ADDRESS OF THE FOLLOWING
  261.     [BX] = OFFSET ADDRESS OF GREEN PLANE
  262.     [CX] = SEGMENT ADDRESS OF GREEN PLANE
  263.     [DX] = SEGMENT ADDRESS OF RED/BLUE PLANE
  264.       (RED OFFSET = 0, BLUE OFFSET = 4000)
  265.  -----------------------------------------------------------
  266.  INT 10 - GET INCRAM ADDRESSES
  267.     REG AH = 71H
  268.     ON RETURN:
  269.        REG  AX  = SEGMENT ADDRESS OF THE FOLLOWING
  270.     [BX] = SEGMENT ADDRESS OF INCRAM
  271.     [CX] = OFFSET ADDRESS OF INCRAM
  272.  -----------------------------------------------------------
  273.  INT 10 - SCROLL SCREEN RIGHT
  274.     REG AH = 72H
  275.     REG AL = NO. OF COLUMNS BLANKED AT LEFT OF PAGE
  276.         0 = BLANK WINDOW
  277.     REG BH = ATTRIBUTES TO BE USED ON BLANK COLUMNS
  278.     WINDOW:
  279.        REG CH,CL = UPPER LEFT CORNER
  280.        REG DH,DL = LOWER RIGHT CORNER
  281.  ----------------------------------------------------------
  282.  INT 10 - SCROLL SCREEN LEFT
  283.     REG AH = 73H
  284.     REG AL = NO. OF COLUMNS BLANKED AT RIGHT OF PAGE
  285.         0 = BLANK WINDOW
  286.     REG BH = ATTRIBUTES TO BE USED ON BLANK COLUMNS
  287.     WINDOW:
  288.        REG CH,CL = UPPER LEFT CORNER
  289.        REG DH,DL = LOWER RIGHT CORNER
  290.  -----------------------------------------------------------
  291.  INT 11 - EQUIPMENT DETERMINATION
  292.     ON RETURN:
  293.        REG AX = "equipment flag"
  294.           bit 0        diskette installed
  295.           bit 1        8087 present
  296.           bit 2,3      always = 11
  297.           bit 4,5      initial video mode
  298.                        01 = 40x25 COLOR
  299.                        10 = 80x25 COLOR
  300.                        11 = 80X25 IBM monochrome
  301.           bit 6,7      number of diskette drives (only if bit 0 = 1)
  302.                        00 = 1, 01 = 2
  303.           bit 8        0 = dma present, 1= no dma on system
  304.           bit 9,10,11  number of RS232 cards
  305.           bit 12       game I/O attached
  306.           bit 13       serial printer installed (IBM-PCjr)
  307.           bit 14,15    number of printers
  308.  -----------------------------------------------------------
  309.  INT 12 - MEMORY SIZE
  310.     ON RETURN:
  311.        REG AX = NO. OF CONTIGUOUS 1K BLOCKS
  312.  -----------------------------------------------------------
  313.  INT 13 - RESET DISK SYSTEM
  314.     REG AH = 0
  315.  -----------------------------------------------------------
  316.  INT 13 - STATUS OF DISK SYSTEM
  317.     REG AH = 1
  318.     ON RETURN:
  319.        REG AL = STATUS
  320.         01H = BAD COMMAND
  321.         02H = ADDRESS MARK NOT FOUND
  322.         03H = WRITE ATTEMPTED ON WRITE-PROTECTED DISK
  323.         04H = SECTOR NOT FOUND
  324.         06H = DISKETTE REMOVED
  325.         08H = DMA OVERRUN
  326.         09H = DMA ACROSS 64K BOUNDARY
  327.         10H = BAD CRC
  328.         20H = CONTROLLER FAILURE
  329.         40H = SEEK FAILED
  330.         80H = TIME OUT
  331.  -----------------------------------------------------------
  332.  INT 13 - READ SECTORS INTO MEMORY
  333.     REG AH = 2
  334.     REG AL = NO. OF SECTORS
  335.     REG CH = TRACK NO.
  336.     REG CL = SECTOR NO.
  337.     REG DH = HEAD NO.
  338.     REG DL = DRIVE NO.
  339.     REG ES:BX = ADDRESS OF BUFFER
  340.     ON RETURN:
  341.            CF = SUCCESS/FAILURE SIGNAL
  342.        REG AH = STATUS (SEE ABOVE)
  343.        AL = NUMBER OF SECTORS READ           
  344.  -----------------------------------------------------------
  345.  INT 13 - WRITES SECTORS FROM MEMORY
  346.     REG AH = 3
  347.     REG AL = NO. OF SECTORS
  348.     REG CH = TRACK NO.
  349.     REG CL = SECTOR NO.
  350.     REG DH = HEAD NO.
  351.     REG DL = DRIVE NO.
  352.     REG ES:BX = ADDRESS OF BUFFER
  353.     ON RETURN:
  354.        CF = SUCCESS/FAILURE SIGNAL
  355.        REG AH = STATUS (SEE ABOVE)
  356.        AL = NUMBER OF SECTORS WRITTEN
  357.  -----------------------------------------------------------
  358.  INT 13 - VERIFIES SECTORS
  359.     REG AH = 4
  360.     REG AL = NO. OF SECTORS
  361.     REG CH = TRACK NO.
  362.     REG CL = SECTOR NO.
  363.     REG DH = HEAD NO.
  364.     REG DL = DRIVE NO.
  365.     ON RETURN:
  366.        CF = SUCCESS/FAILURE SIGNAL
  367.        REG AH = STATUS (SEE ABOVE)
  368.        AL = NUMBER OF SECTORS VERIFIED
  369.  -----------------------------------------------------------
  370.  INT 13 - FORMAT DISKETTE TRACK
  371.     REG AH = 5
  372.         AL = NUMBER OF SECTORS
  373.     CH = TRACK NUMBER
  374.     CL = SECTOR NUMBER
  375.     DH = HEAD NUMBER
  376.     DL = DRIVE NUMBER
  377.     ES:BX = POINTER TO 4-BYTE ADDRESS FIELD
  378.         BYTE 1 = TRACK
  379.         BYTE 2 = HEAD
  380.         BYTE 3 = SECTOR
  381.         BYTE 4 = BYTES/SECTOR
  382.     ON RETURN:
  383.            CF = SUCCESS/FAILURE SIGNAL
  384.        REG AH = STATUS CODE (SEE ABOVE)    
  385.  -----------------------------------------------------------
  386.  INT 13 - GET CURRENT DRIVE PARAMETERS (PC/AT ONLY)
  387.      REG AH = 8
  388.      ON RETURN:
  389.             CF = SUCCESS/FAILURE FLAG
  390.         REG AH = STATUS CODE (SEE ABOVE)
  391.         DL = NUMBER OF DRIVES
  392.         DH = MAX. NUMBER OF SIDES
  393.         CL = MAX. NUMBER OF SECTORS
  394.         CH = MAX. NUMBER OF TRACKS
  395.  -----------------------------------------------------------
  396.  INT 13 - INITIAL TWO FIXED DISK BASE TABLES (PC/AT ONLY)
  397.      REG AH = 9
  398.      ON RETURN:
  399.         CF = SUCCESS/FAILURE FLAG
  400.     REG AH = STATUS CODE (SEE ABOVE)
  401.     INTERRUPT 41 POINTS TO TABLE FOR DRIVE 0
  402.     INTERRUPT 46 POINTS TO TABLE FOR DRIVE 1
  403.  -----------------------------------------------------------
  404.  INT 13 - READ LONG (PC/AT ONLY)
  405.      REG AH = 0AH
  406.      DL = DRIVE ID
  407.      DH = HEAD NUMBER
  408.      CH = CYLINDER NUMBER
  409.      CL = SECTOR NUMBER
  410.      ES:BX = POINTER TO BUFFER
  411.      ON RETURN:
  412.         CF = SUCCESS/FAILURE FLAG
  413.     REG AH = STATUS CODE (SEE ABOVE)
  414.  -----------------------------------------------------------
  415.  INT 13 - WRITE LONG (PC/AT ONLY)
  416.      REG AH = 0BH
  417.      DL = DRIVE ID
  418.      DH = HEAD NUMBER
  419.      CH = SECTOR NUMBER
  420.      ES:BX = POINTER TO BUFFER
  421.      ON RETURN:
  422.         CF = SUCCESS/FAILURE FLAG
  423.     REG AH = STATUS CODE (SEE ABOVE)         
  424.  -----------------------------------------------------------
  425.  INT 13 - SEEK TO CYLINDER (PC/AT ONLY)
  426.      REG AH = 0CH
  427.      DL = DRIVE ID
  428.      DH = HEAD NUMBER
  429.      CH = SECTOR NUMBER
  430.      ON RETURN:
  431.         CF = SUCCESS/FAILURE FLAG
  432.     REG AH = STATUS CODE (SEE ABOVE)
  433.  -----------------------------------------------------------
  434.  INT 13 - ATLERNATE DISK RESET (PC/AT ONLY)
  435.      REG AH = 0DH
  436.      DL = DRIVE ID
  437.      ON RETURN:
  438.         CF = SUCCESS/FAIL FLAG
  439.     REG AH = STATUS CODE (SEE ABOVE)
  440.  -----------------------------------------------------------
  441.  INT 13 - TEST FOR DRIVE READY (PC/AT ONLY)
  442.      REG AH = 10H
  443.      DL = DRIVE ID
  444.      ON RETURN:
  445.         CF = SUCCESS/FAIL FLAG
  446.     REG AH = STATUS CODE (SEE ABOVE)
  447.  -----------------------------------------------------------
  448.  INT 13 - RECALIBRATE DRIVE (PC/AT ONLY)
  449.      REG AH = 11H
  450.      DL = DRIVE ID
  451.      ON RETURN:
  452.         CF = SUCCESS/FAIL FLAG
  453.     REG AH = STATUS CODE (SEE ABOVE)
  454.  -----------------------------------------------------------
  455.  INT 13 - CONTROLLER DIAGNOSTICS (PC/AT ONLY)
  456.      REG AH = 14H
  457.      ON RETURN:
  458.         CF = SUCCESS/FAIL FLAG
  459.     REG AH = STATUS CODE (SEE ABOVE)
  460.  -----------------------------------------------------------
  461.  INT 13 - GET DISK TYPE (PC/AT ONLY)
  462.      REG AH = 15H
  463.      DL = DRIVE ID
  464.      ON RETURN:
  465.     REG AH = DISK TYPE
  466.          0 = DISK NOT THERE
  467.          1 = DISKETTE, NO CHANGE DETECTION PRESENT
  468.          2 = DISKETTE, CHANGE DETECTION PRESENT
  469.          3 = FIXED DISK
  470.         CX,DX = NUMBER OF 512-BYTE SECTORS WHEN AH = 3
  471.  -----------------------------------------------------------
  472.  INT 13 - CHANGE OF DISK STATUS (PC/AT ONLY)
  473.      REG AH = 16H
  474.      ON RETURN:
  475.     REG DL = DRIVE THAT HAD DISK CHANGE
  476.         AH = DISK CHANGE STATUS
  477.          00 = NO DISK CHANGE
  478.          01 = DISK CHANGED
  479.  -----------------------------------------------------------
  480.  INT 13 - SET DISK TYPE (PC/AT ONLY)
  481.      REG AH = 17H
  482.      AL = DISK TYPE
  483.           00 = NO DISK
  484.           01 = REGULAR DISKETTE IN REGULAR DRIVE
  485.           02 = HIGH-CAP. DISK IN HIGH-CAP. DRIVE
  486.  -----------------------------------------------------------
  487.  INT 14 - SERIAL I/O - INITIALIZE USART
  488.     REG AH = 0
  489.     REG AL = INITIALIZING PARAMETERS
  490.     BIT  7 - 6 - 5 4 - 3  2    1 - 0
  491.    -BAUD RATE-    PARITY  STOP    WORD
  492.             BITS  LENGTH
  493.    000  110 BD    00 NONE 0-1   10 - 7
  494.    001  150 BD    01 ODD 1-2   11 - 8
  495.    010  300 BD    11 EVEN
  496.    011  600 BD
  497.    100 1200 BD
  498.    101 2400 BD
  499.    110 4800 BD
  500.    111 9600 BD (4800 ON PCjr)
  501.         DX = PORT NUMBER
  502.  -----------------------------------------------------------
  503.  INT 14 - SERIAL I/O - TRANSMIT CHARACTER
  504.     REG AH = 1
  505.         AL = CHARACTER
  506.     DX = PORT NUMBER
  507.     ON RETURN:
  508.        REG AH = RS-232 STATUS CODE
  509.         BIT 0 = DATA READY
  510.         1 = OVERRUN ERROR
  511.         2 = PARITY ERROR
  512.         3 = FRAMING ERROR
  513.         4 = BREAK DETECTED
  514.         5 = TRANSMISSION BUFFER REG. EMPTY
  515.         6 = TRANSMISSION SHIFT REG. EMPTY
  516.         7 = TIME OUT
  517.        AL = MODEM STATUS
  518.         BIT 0 = DELTA CLEAR-TO-SEND
  519.         1 = DELTA DATA-SET-READY
  520.         2 = TRAILING EDGE RING DETECTED
  521.         3 = CHANGE, RECEIVE LINE SIGNAL DETECTED
  522.         4 = CLEAR-TO-SEND
  523.         5 = DATA-SET-READY
  524.         6 = RING DETECTED
  525.         7 = RECEIVE LINE SIGNAL DETECTED
  526.  -----------------------------------------------------------
  527.  INT 14 - SERIAL I/O - RECEIVE CHARACTER
  528.     REG AH = 2
  529.     ON RETURN:
  530.        REG AL = CHARACTER RECEIVED
  531.        REG AH = RS-232 STATUS CODE (SEE ABOVE)
  532.  -----------------------------------------------------------
  533.  INT 14 - SERIAL I/O - GET USART STATUS
  534.     REG AH = 3
  535.     ON RETURN:
  536.        REG AH = RS-232 STATUS CODE (SEE ABOVE)
  537.        REG AL = MODEM STATUS CODE (SEE ABOVE)
  538.  -----------------------------------------------------------
  539.  INT 15 - TURN ON CASSETTE MOTOR
  540.     REG AH = 0
  541.  -----------------------------------------------------------
  542.  INT 15 - TURN OFF CASSETTE MOTOR
  543.     REG AH = 1
  544.  -----------------------------------------------------------
  545.  INT 15 - READ DATA BLOCKS FROM CASSETTE
  546.     REG AH = 2
  547.     CX = COUNT OF BYTES
  548.     ES:BX = POINTER TO DATA AREA
  549.     ON RETURN:
  550.         CF = ERROR SIGNAL
  551.     REG DX = COUNT OF BYTES READ
  552.         ES:BX = POINTER PAST LAST BYTE READ
  553.  -----------------------------------------------------------
  554.  INT 15 - WRITE DATA BLOCKS TO CASSETTE
  555.     REG AH = 3
  556.     CX = COUNT OF BYTES TO WRITE
  557.     ES:BX = POINTER TO DATA AREA
  558.     ON RETURN:
  559.     REG ES:BX = POINTER PAST LAST BYTE WRITTEN
  560.  -----------------------------------------------------------
  561.  INT 15 - DEVICE OPEN (PC/AT ONLY)
  562.     REG AH = 80
  563.     BX = DEVICE ID
  564.     CX = PROCESS TYPE
  565.  -----------------------------------------------------------
  566.  INT 15 - DEVICE CLOSE (PC/AT ONLY)
  567.     REG AH = 81
  568.     BX = DEVICE ID
  569.     CX = PROCESS TYPE
  570.  -----------------------------------------------------------
  571.  INT 15 - DEVICE PROGRAM TERMINATE (PC/AT ONLY)
  572.     REG AH = 82
  573.     BX = DEVICE ID
  574.  -----------------------------------------------------------
  575.  INT 15 - EVENT WAIT (PC/AT ONLY)
  576.     REG AH = 83
  577.     AL = SUBSERVICE
  578.          0 = SET INTERVAL
  579.          1 = CANCEL
  580.     ES:BX = POINTER TO CALLER'S MEMORY
  581.     CX,DX = NUMBER OF MICROSECONDS TO WAIT
  582.  -----------------------------------------------------------
  583.  INT 15 - READ JOYSTICK SWITCH SETTINGS (PC/AT ONLY)
  584.     REG AH = 84
  585.     DX = 0
  586.     ON RETURN:
  587.     REG AL = SWITCH SETTINGS
  588.  -----------------------------------------------------------
  589.  INT 15 - READ JOYSTICK INPUTS (PC/AT ONLY)
  590.     REG AH = 84
  591.     DX = 1
  592.     ON RETURN:
  593.     REG AX = A(x) VALUE
  594.         BX = A(y) VALUE
  595.         CX = B(x) VALUE
  596.         DX = B(y) VALUE
  597.  -----------------------------------------------------------
  598.  INT 15 - SYSTEM REQUEST KEY PRESS (PC/AT ONLY)
  599.     REG AH = 85
  600.     AL = 00 PRESS
  601.     AL = 01 BREAK
  602.  -----------------------------------------------------------
  603.  INT 15 - WAIT (PC/AT ONLY)
  604.     REG AH = 86
  605.     CX,DX = NUMBER OF MICROSECONDS TO WAIT
  606.  -----------------------------------------------------------
  607.  INT 15 - EXTENDED MEMORY - BLOCK MOVE    (PC/AT ONLY)
  608.     REG AH = 87
  609.         CX = NUMBER OF WORDS TO MOVE
  610.     ES:SI = POINTER TO TABLE
  611.  -----------------------------------------------------------
  612.  INT 15 - EXTENDED MEMORY - GET MEMORY SIZE    (PC/AT ONLY)
  613.     REG AH = 88
  614.     ON RETURN:
  615.        REG AX = MEMORY SIZE
  616.  -----------------------------------------------------------
  617.  INT 15 - SWITCH TO VIRTUAL MODE (PC/AT ONLY)
  618.     REG AH = 89
  619.  -----------------------------------------------------------
  620.  INT 15 - DEVICE BUSY LOOP (PC/AT ONLY)
  621.     REG AH = 90
  622.     AL = TYPE CODE
  623.  -----------------------------------------------------------
  624.  INT 15 - SET FLAG AND COMPLETE INTERRUPT
  625.     REG AH = 91
  626.     AL = TYPE CODE
  627.  -----------------------------------------------------------
  628.  INT 16 - KEYBOARD I/O - READ CHAR FROM BUFFER - WAIT IF EMPTY
  629.     REG AH = 0
  630.     ON RETURN:
  631.        REG AH = SCAN CODE
  632.        REG AL = CHARACTER
  633.  -----------------------------------------------------------
  634.  INT 16 - KEYBOARD I/O - CHECK BUFFER - DO NOT CLEAR
  635.     REG AH = 1
  636.     ON RETURN:
  637.        FLAG ZF = 0 = CHAR IN BUFFER
  638.        REG AH = SCAN CODE
  639.        REG AL = CHARACTER
  640.        FLAG ZF = 1 = NO CHAR IN BUFFER
  641.  -----------------------------------------------------------
  642.  INT 16 - KEYBOARD I/O - GET SHIFT STATUS
  643.     REG AH = 2
  644.     ON RETURN:
  645.     REG AL = SHIFT STATUS BITS
  646.          BIT 0 = RIGHT SHIFT KEY DEPRESSED
  647.          1 = LEFT SHIFT KEY DEPRESSED
  648.           2 = CTRL DEPRESSED
  649.          3 = ALT DEPRESSED
  650.          4 = SCROLL LOCK ACTIVE
  651.          5 = NUM LOCK ACTIVE
  652.          6 = CAPS LOCK ACTIVE
  653.          7 = INSERT STATE ACTIVE
  654.  -----------------------------------------------------------
  655.  INT 16 - KEYBOARD - SET DELAYS (PCjr ONLY)
  656.     REG AH = 3
  657.     AL = 0: RESET TYPEMATIC
  658.     AL = 1: INCREASE INITIAL DELAY
  659.     AL = 2: INCREASE CONTINUING DELAY
  660.     AL = 3: INCREASE BOTH DELAYS
  661.     AL = 4: TURN OFF TYPEMATIC 
  662.  -----------------------------------------------------------
  663.  INT 16 - KEYBOARD - KEYCLICK (PCjr ONLY)
  664.     REG AH = 4
  665.     AL = 0: CLICK OFF
  666.     AL = 1: CLICK ON
  667.  -----------------------------------------------------------
  668.  INT 17 - CHARACTER TO PRINTER
  669.     REG AH = 0
  670.     REG AL = CHAR
  671.     ON RETURN:
  672.        REG AH = STATUS
  673.             BIT    0 = TIME OUT
  674.               1 = UNUSED
  675.         2 = UNUSED
  676.         3 = I/O ERROR
  677.         4 = SELECTED
  678.               5 = OUT OF PAPER
  679.         6 = ACKNOWLEDGE
  680.               7 = NOT BUSY
  681.  -----------------------------------------------------------
  682.  INT 17 - INITIALIZE PRINTER
  683.     REG AH = 1
  684.     ON RETURN:
  685.        REG AH = STATUS (SEE ABOVE)
  686.  -----------------------------------------------------------
  687.  INT 17 - STATUS OF PRINTER
  688.     REG AH = 2
  689.     ON RETURN:
  690.        REG AH = STATUS (SEE ABOVE)
  691.  -----------------------------------------------------------
  692.  INT 18 - TRANSFER TO ROM BASIC
  693.     CAUSES TRANSFER TO ROM-BASED BASIC (IBM-PC)
  694.     OFTEN REBOOTS A COMPATABLE
  695.  -----------------------------------------------------------
  696.  INT 19 - DISK BOOT
  697.     CAUSES REBOOT OF DISK SYSTEM (NO MEMORY TEST PERFORMED).
  698.  -----------------------------------------------------------
  699.  INT 1A - GET TIME OF DAY
  700.     REG AH = 0
  701.     ON RETURN:
  702.        REG CX = high (most signif.) portion of clock count
  703.            DX = low (least signif.) portion of clock count
  704.            AL = 0 if clock was read or written (via AH=0,1)
  705.                 withing the current 24-hour period
  706.                 Otherwise, AL > 0
  707.  -----------------------------------------------------------
  708.  INT 1A - SET TIME OF DAY
  709.     REG AH = 1
  710.         CX = high (most signif.) portion of clock count
  711.         DX = low (least signif.) portion of clock count
  712.  -----------------------------------------------------------
  713.  INT 1A - READ REAL TIME CLOCK (PC/AT ONLY)
  714.     REG AH = 2
  715.     ON RETURN:
  716.     REG CH = HOURS
  717.         CL = MINUTES
  718.         DH = SECONDS
  719.  -----------------------------------------------------------
  720.  INT 1A - SET REAL TIME CLOCK (PC/AT ONLY)
  721.     REG AH = 3
  722.     CH = HOURS
  723.     CL = MINUTES
  724.     DH = SECONDS
  725.     DL = 1, IF DAYLIGHT SAVINGS; 0 IF STANDARD TIME
  726.  -----------------------------------------------------------
  727.  INT 1A - READ DATE FROM REAL TIME CLOCK (PC/AT ONLY)
  728.     REG AH = 4
  729.     ON RETURN:
  730.     REG DL = DAY
  731.         DH = MONTH
  732.         CL = YEAR
  733.         CH = CENTURY (19 OR 20)
  734.  -----------------------------------------------------------
  735.  INT 1A - SET DATE IN REAL TIME CLOCK (PC/AT ONLY)
  736.     REG AH = 5
  737.     DL = DAY
  738.     DH = MONTH
  739.     CL = YEAR
  740.     CH = CENTURY (19 OR 20)
  741.  -----------------------------------------------------------
  742.  INT 1A - SET ALARM (PC/AT ONLY)
  743.     REG AH = 6
  744.     CH = HOURS
  745.     CL = MINUTES
  746.     DH = SECONDS
  747.     ON RETURN:
  748.     INT. 4A = ADDRESS OF ALARM ROUTINE
  749.  -----------------------------------------------------------
  750.  INT 1A - RESET ALARM (PC/AT ONLY)
  751.     REG AH = 7
  752.  -----------------------------------------------------------
  753.  INT 1B - CTRL-BREAK KEY (on IBM at least)
  754.   This interrupt is called when the keyboard scanner of
  755.  the IBM machines detects CTRL and BREAK pressed at the same
  756.  time. It normally points to a simple IRET so that it does
  757.  nothing, but many programs change it to return a CTRL-C scan
  758.  code and thus invoke INT 23.
  759.  -----------------------------------------------------------
  760.  INT 1C - CLOCK TICK (on IBM at least)
  761.   This interrupt is called (in the IBM) at the end of
  762.  each time-update operation by the real-time clock routines. It
  763.  normally points to an IRET unless PRINT.COM has been installed.
  764.  -----------------------------------------------------------
  765.  INT 20 - PROGRAM TERMINATION (MSDOS generic)
  766.     NOTE:     NO PARAMETERS - RETURNS TO DOS
  767.  -----------------------------------------------------------
  768.  INT 21 - PROGRAM TERMINATION (MSDOS generic)
  769.     Reg AH = 0
  770.     Same action as INT 20; returns to DOS.
  771.  -----------------------------------------------------------
  772.  INT 21 - KEYBOARD INPUT (MSDOS generic)
  773.     REG AH = 1
  774.     ON RETURN:
  775.     REG AL = CHARACTER READ
  776.  -----------------------------------------------------------
  777.  INT 21 - DISPLAY OUTPUT (MSDOS generic)
  778.     REG AH = 2
  779.     REG DL = CHAR
  780.  -----------------------------------------------------------
  781.  INT 21 - AUX Input (MSDOS generic)
  782.     Reg AH = 3
  783.     Return with char in reg AL.
  784.        NOTE - Waits for char, gives no error
  785.           indications.
  786.  -----------------------------------------------------------
  787.  INT 21 - AUX Output (MSDOS generic)
  788.     Reg AH = 4
  789.     Reg DL = char to send to AUX
  790.        No error indications!!
  791.  -----------------------------------------------------------
  792.  INT 21 - PRINTER OUTPUT (MSDOS generic)
  793.     REG AH = 5
  794.     REG DL = CHAR
  795.  -----------------------------------------------------------
  796.  INT 21 - DIRECT CONSOLE I/O - CHARACTER OUTPUT (MSDOS generic)
  797.     REG AH = 06H
  798.     REG DL = CHAR
  799.  -----------------------------------------------------------
  800.  INT 21 - DIRECT CONSOLE I/O - CHARACTER INPUT (MSDOS generic)
  801.     REG AH = 06H
  802.     REG DL = 0FFH
  803.     ON RETURN:
  804.        FLAG ZF = SET    = NO CHARACTER
  805.      CLEAR  = CHARACTER RECIEVED
  806.      REG AL = CHARACTER
  807.     Character is echoed to STDOUT if received.
  808.  -----------------------------------------------------------
  809.  INT 21 - Direct STDIN Input, no echo (MSDOS generic)
  810.     Reg AH = 7
  811.     Same as Function 6 for input but char not echoed.
  812.  -----------------------------------------------------------
  813.  INT 21 - KEYBOARD INPUT - NO ECHO (MSDOS generic)
  814.     REG AH = 8
  815.     ON RETURN:
  816.        REG AL = CHAR
  817.  -----------------------------------------------------------
  818.  INT 21 - PRINT STRING (MSDOS generic)
  819.     REG AH = 9
  820.     DS:DX  = ADDRESS OF STRING
  821.     NOTE:      STRING TERMINATED WITH "$"
  822.  -----------------------------------------------------------
  823.  INT 21 - BUFFERED KEYBOARD INPUT (MSDOS generic)
  824.     REG AH = 0AH
  825.     DS:DX  = ADDRESS OF BUFFER
  826.     FIRST BYTE OF BUFFER MUST HAVE MAX LENGTH
  827.     ON RETURN SECOND BYTE HAS ACTUAL LENGTH
  828.  -----------------------------------------------------------
  829.  INT 21 - CHECK STANDARD INPUT STATUS (MSDOS generic)
  830.     REG AH = 0BH
  831.     ON RETURN:
  832.        REG AL = FFH IF CHAR TYPED
  833.         00H IF NOT TYPED
  834.  -----------------------------------------------------------
  835.  INT 21 - Clear Keyboard Buffer (MSDOS generic)
  836.     Reg AH = 0CH
  837.     Reg AL must be 1, 6, 7, 8, or 0aH.
  838.        Flushes all typeahead input, then executes
  839.  function specified by AL (by moving it to AH and repeating the
  840.  INT 21 call).
  841.  -----------------------------------------------------------
  842.  INT 21 - Disk Reset (MSDOS generic)
  843.     Reg AH = 0DH
  844.     Flushes all disk buffers.
  845.  -----------------------------------------------------------
  846.  INT 21 - SELECT DISK (MSDOS generic)
  847.     REG AH = 0EH
  848.     REG DL = new default drive number (0 = A, 1 = B, etc.)
  849.     ON RETURN:
  850.        AL = number of logical drives
  851.  -----------------------------------------------------------
  852.  INT 21 - OPEN DISK FILE (MSDOS generic)
  853.     REG AH = 0FH
  854.     REG DS = SEGMENT ADDRESS OF FCB
  855.     REG DX = OFFSET ADDRESS OF FCB
  856.     ON RETURN:
  857.        REG AL = 00 = FILE FOUND
  858.         FF = FILE NOT FOUND
  859.  -----------------------------------------------------------
  860.  INT 21 - CLOSE DISK FILE (MSDOS generic)
  861.     REG AH = 10H
  862.     REG DS = SEGMENT ADDRESS OF FCB
  863.     REG DX = OFFSET ADDRESS OF FCB
  864.  -----------------------------------------------------------
  865.  INT 21 - Search First using FCB (MSDOS generic)
  866.     REG AH = 11H
  867.     REG DS = SEGMENT ADDRESS OF FCB
  868.     REG DX = OFFSET ADDRESS OF FCB
  869.     FCB may contain wildcard chars.
  870.     On Return:
  871.        REG AL = 00 = FILE FOUND
  872.         FF = FILE NOT FOUND
  873.     If file found, FCB is created at DTA address and
  874.     set up to OPEN or DELETE it.
  875.  -----------------------------------------------------------
  876.  INT 21 - Search Next using FCB (MSDOS generic)
  877.     REG AH = 12H
  878.     REG DS = SEGMENT ADDRESS OF FCB
  879.     REG DX = OFFSET ADDRESS OF FCB
  880.     Search First must have been called earlier.
  881.     On Return:
  882.        Same as Search First; if AL = 0ffH, no more
  883.  left.
  884.  -----------------------------------------------------------
  885.  INT 21 - Delete File via FCB (MSDOS generic)
  886.     REG AH = 13H
  887.     REG DS = SEGMENT ADDRESS OF FCB
  888.     REG DX = OFFSET ADDRESS OF FCB
  889.     On Return:
  890.        REG AL = 00 = FILE FOUND
  891.         FF = FILE NOT FOUND
  892.  -----------------------------------------------------------
  893.  INT 21 - SEQUENTIAL DISK FILE READ (MSDOS generic)
  894.     REG AH = 14H
  895.     REG DS = SEGMENT ADDRESS OF FCB
  896.     REG DX = OFFSET ADDRESS OF FCB
  897.     ON RETURN:
  898.        REG AL = 0 = SUCCESSFUL READ
  899.         1 = END OF FILE
  900.         2 = DATA TRANSFER AREA TOO SMALL
  901.         3 = PARTIAL RECORD, EOF
  902.  -----------------------------------------------------------
  903.  INT 21 - SEQUENTIAL DISK RECORD WRITE (MSDOS generic)
  904.     REG AH = 15H
  905.     REG DS = SEGMENT ADDRESS OF FCB
  906.     REG DX = OFFSET ADDRESS OF FCB
  907.     ON RETURN:
  908.        REG AL = 0 = SUCCESSFUL WRITE
  909.         1 = DISKETTE FULL
  910.         2 = DATA TRANSFER AREA TOO SMALL
  911.  -----------------------------------------------------------
  912.  INT 21 - CREATE A DISK FILE (MSDOS generic)
  913.     REG AH = 16H
  914.     REG DS = SEGMENT ADDRESS OF FCB
  915.     REG DX = OFFSET ADDRESS OF FCB
  916.     ON RETURN:
  917.        REG AL = 00 = SUCCESSFUL CREATION
  918.         FF = NO ROOM IN DIRECTORY
  919.  -----------------------------------------------------------
  920.  INT 21 - Rename File via FCB (MSDOS generic)
  921.     REG AH = 17H
  922.     REG DS = SEGMENT ADDRESS OF FCB
  923.     REG DX = OFFSET ADDRESS OF FCB
  924.        FCB contains new name starting at byte 17H.
  925.     On Return:
  926.        REG AL = 00 = FILE FOUND
  927.         FF = FILE NOT FOUND
  928.  -----------------------------------------------------------
  929.  INT 21 - Internal - does nothing (MSDOS generic)
  930.     REG AH = 18H
  931.     On Return:
  932.     AL = 0
  933.  -----------------------------------------------------------
  934.  INT 21 - Default Disk Number (MSDOS generic)
  935.     REG AH = 19H
  936.     On Return:
  937.     AL = current drive number (letter - 'A')
  938.  -----------------------------------------------------------
  939.  INT 21 - SET DISK TRANSFER AREA ADDRESS (MSDOS generic)
  940.     REG AH = 1AH
  941.     REG DS = SEGMENT ADDRESS OF BUFFER
  942.     REG DX = OFFSET ADDRESS OF BUFFER
  943.     ON RETURN:
  944.        Registers are unchanged, no error codes
  945.  -----------------------------------------------------------
  946.  INT 21 - Default Drive Disk Size (MSDOS generic)
  947.     REG AH = 1BH
  948.     On Return:
  949.        DS:BX points to FAT ID byte
  950.        DX = number of allocation units on disk
  951.        AL = number of sectors per AU
  952.        CX = number of bytes per sector
  953.  -----------------------------------------------------------
  954.  INT 21 - Specific Drive's Disk Size (MSDOS generic)
  955.     REG AH = 1CH
  956.     Reg DL = Drive Number to check
  957.     On Return:
  958.        DS:BX points to FAT ID byte
  959.        DX = number of allocation units on disk
  960.        AL = number of sectors per AU
  961.        CX = number of bytes per sector
  962.  -----------------------------------------------------------
  963.  INT 21 - Internal - does nothing (MSDOS generic)
  964.     REG AH = 1DH
  965.     On Return:
  966.        AL = 0
  967.  -----------------------------------------------------------
  968.  INT 21 - Internal - does nothing (MSDOS generic)
  969.     REG AH = 1EH
  970.     On Return:
  971.        AL = 0
  972.  -----------------------------------------------------------
  973.  INT 21 - Internal - unknown but like FN 32 (MSDOS generic)
  974.     REG AH = 1fH
  975.     Other registers unknown
  976.     On Return:
  977.        REG AL = 00 = No Error
  978.         FF = Error
  979.        Unknown vector returned in ES:BX.
  980.  -----------------------------------------------------------
  981.  INT 21 - Internal - does nothing (MSDOS generic)
  982.     REG AH = 20H
  983.     On Return:
  984.        AL = 0
  985.  -----------------------------------------------------------
  986.  INT 21 - RANDOM DISK RECORD READ (MSDOS generic)
  987.     REG AH = 21H
  988.     REG DS = SEGMENT ADDRESS OF FCB
  989.     REG DX = OFFSET ADDRESS OF FCB
  990.     ON RETURN:
  991.        REG AL = 0 = SUCCESSFUL READ
  992.         1 = END OF FILE
  993.         2 = DATA TRANSFER AREA TOO SMALL
  994.         3 = PARTIAL RECORD, EOF
  995.  -----------------------------------------------------------
  996.  INT 21 - Random Disk Write (MSDOS generic)
  997.     REG AH = 22H
  998.     Same setup as Random Read, but writes to disk
  999.  -----------------------------------------------------------
  1000.  INT 21 - FILE SIZE (MSDOS generic)
  1001.     REG AH = 23H
  1002.     REG DS = SEGMENT ADDRESS OF FCB
  1003.     REG DX = OFFSET ADDRESS OF FCB
  1004.     ON RETURN:
  1005.        REG AL = 00 = FILE FOUND
  1006.         FF = FILE NOT FOUND
  1007.        FCB SET TO NO. OF RECORDS
  1008.  -----------------------------------------------------------
  1009.  INT 21 - Set Random Record Field (MSDOS generic)
  1010.     REG AH = 24H
  1011.     REG DS = SEGMENT ADDRESS OF FCB
  1012.     REG DX = OFFSET ADDRESS OF FCB
  1013.     FCB must be OPEN already
  1014.     On Return:
  1015.        Random Record Field of FCB is set to be
  1016.        same as Current Block and Current Record.
  1017.     No error code is returned.
  1018.  -----------------------------------------------------------
  1019.  INT 21 - Set Interrupt Vector (MSDOS generic)
  1020.     REG AH = 25H
  1021.     Reg AL = INT number
  1022.     DS:DX = new vector to be used for specified INT
  1023.     On Return:
  1024.        Registers are unchanged; no error codes
  1025.  -----------------------------------------------------------
  1026.  INT 21 - Create PSP (MSDOS generic)
  1027.     REG AH = 26H
  1028.     Reg DX = Segment number to set up PSP at
  1029.     On Return:
  1030.        Current PSP is copied to specified segment
  1031.  -----------------------------------------------------------
  1032.  INT 21 - RANDOM BLOCK READ (MSDOS generic)
  1033.     REG AH = 27H
  1034.     REG DS = SEGMENT ADDRESS OF FCB
  1035.     REG DX = OFFSET ADDRESS OF FCB
  1036.     REG CX = NO. OF RECORDS TO BE READ
  1037.     ON RETURN:
  1038.        REG AL = 0 = SUCCESSFUL READ
  1039.         1 = END OF FILE
  1040.         2 = DATA TRANSFER AREA TOO SMALL
  1041.         3 = PARTIAL RECORD, EOF
  1042.  -----------------------------------------------------------
  1043.  INT 21 - RANDOM BLOCK WRITE (MSDOS generic)
  1044.     REG AH = 28H
  1045.     REG DS = SEGMENT ADDRESS OF FCB
  1046.     REG DX = OFFSET ADDRESS OF FCB
  1047.     REG CX = NO. OF RECORDS TO BE WRITTEN
  1048.     ON RETURN:
  1049.        REG AL = 0 = SUCCESSFUL WRITE
  1050.         1 = DISKETTE FULL
  1051.         2 = DATA TRANSFER AREA TOO SMALL
  1052.  -----------------------------------------------------------
  1053.  INT 21 - Parse Filename (MSDOS generic)
  1054.     REG AH = 29H
  1055.     DS:SI = POINTER TO STRING TO PARSE
  1056.     ES:DI = POINTER TO MEMORY TO FILL WITH UNOPENED FCB
  1057.     AL = BIT MASK TO CONTROL PARSING
  1058.             BIT 0 = 0: PARSING STOPS IF FILE SEPERATOR FOUND
  1059.             1: LEADING SEPERATOR IGNORED
  1060.         1 = 0: DRIVE NUMNER IN FCB SET TO DEFAULT IF
  1061.             STRING CONTAINS NO DRIVE NUMBER
  1062.             1: DRIVE NUMBER IN FCB NOT CHANGED
  1063.         2 = 0: FILENAME IN FCB SET TO BLANKS IF NO
  1064.             FILENAME IN STRING
  1065.             1: FILENAME IN FCB NOT CHANGED IF STRING 
  1066.             DOES NOT CONTAIN A FILENAME
  1067.         3 = 0: EXTENSION IN FCB SET TO BLANKS IF NO
  1068.             EXTENSION IN STRING
  1069.             1: EXTENSION LEFT UNCHANGED
  1070.     ON RETURN:
  1071.     REG AL = 00: NO WILDCARDS IN NAME OR EXTENSION
  1072.          01: WILDCARDS APPEARED IN NAME OR EXTENSION
  1073.         DS:SI = POINTER TO FIRST BYTE AFTER PARSED STRING
  1074.         ES:DI = UNOPENED FCB
  1075.  -----------------------------------------------------------
  1076.  INT 21 - GET CURRENT DATE (MSDOS generic)
  1077.     REG AH = 2AH
  1078.     ON RETURN:
  1079.        REG DL = DAY
  1080.        REG DH = MONTH
  1081.        REG CX = YEAR
  1082.        REG AL = DAY OF THE WEEK (0=SUNDAY, 1=MONDAY, ETC.)
  1083.  -----------------------------------------------------------
  1084.  INT 21 - Set CURRENT DATE (MSDOS generic)
  1085.     REG AH = 2bH
  1086.     REG DL = DAY
  1087.     REG DH = MONTH
  1088.     REG CX = YEAR
  1089.     On Return:
  1090.        AL = 0 if no error
  1091.        AL = 0ffH if bad value sent to routine
  1092.  -----------------------------------------------------------
  1093.  INT 21 - GET CURRENT TIME (MSDOS generic)
  1094.     REG AH = 2CH
  1095.     ON RETURN:
  1096.        REG CH = HOURS
  1097.        REG CL = MINUTES
  1098.        REG DH = SEC
  1099.        REG DL = SEC/100
  1100.     NOTE: TIME IS UPDATED EVERY 5/100 SECOND
  1101.  -----------------------------------------------------------
  1102.  INT 21 - Set CURRENT TIME (MSDOS generic)
  1103.     REG AH = 2DH
  1104.     REG CH = HOURS
  1105.     REG CL = MINUTES
  1106.     REG DH = SEC
  1107.     REG DL = SEC/100
  1108.     On Return:
  1109.        AL = 0 if no error
  1110.        AL = 0ffH if bad value sent to routine
  1111.  -----------------------------------------------------------
  1112.  INT 21 - Set Verify Flag (MSDOS generic)
  1113.     REG AH = 2EH
  1114.      DL = 0
  1115.     AL = 1 if VERIFY on
  1116.     AL = 0 if VERIFY off
  1117.  -----------------------------------------------------------
  1118.  INT 21 - Get Disk Transfer Area Address (MSDOS generic)
  1119.     REG AH = 2FH
  1120.     On Return:
  1121.        Reg ES = SEGMENT address of DTA
  1122.        Reg BX = OFFSET address of DTA
  1123.  -----------------------------------------------------------
  1124.  INT 21 - Get DOS Version (MSDOS generic)
  1125.     REG AH = 30H
  1126.     On Return:
  1127.        Reg AL = Major Version number
  1128.        Reg AH = Minor Version number
  1129.                 (i.e., DOS 2.10 returns AX = 0A02H)
  1130.        Reg BH = OEM number
  1131.        Reg BL:CX = 24-bit user number
  1132.  -----------------------------------------------------------
  1133.  INT 21 - TERMINATE BUT STAY RESIDENT (MSDOS generic)
  1134.     REG AH = 31H
  1135.     REG AL = EXIT CODE
  1136.     REG DX = PROGRAM SIZE, IN PARAGRAPHS
  1137.         ADDRESS IN HEX - XX XX 0 -
  1138.     ON RETURN:
  1139.     REG AX = RETURN CODE (RETRIEVEABLE BY FUNCTION 4DH)
  1140.  -----------------------------------------------------------
  1141.  INT 21 - Internal - unknown (MSDOS generic)
  1142.     REG AH = 32H
  1143.     Other registers unknown
  1144.     On Return:
  1145.        REG AL = 00 = No Error
  1146.         FF = Error
  1147.        Unknown vector returned in ES:BX.
  1148.  -----------------------------------------------------------
  1149.  INT 21 - Get or Set CONTROL-BREAK (MSDOS generic)
  1150.     REG AH = 33H
  1151.     Reg AL = 0 for Get or 1 for Put
  1152.     Reg DL = 0 for OFF or 1 for ON
  1153.     On Return:
  1154.      DL = 0 if BREAK=OFF or 1 if BREAK=ON
  1155.     AL = FFH IF ERROR
  1156.  -----------------------------------------------------------
  1157.  INT 21 - Internal - Return CritSectFlag Pointer (MSDOS generic)
  1158.     REG AH = 34H
  1159.     On Return:
  1160.        ES:BX points to DOS "Critical Section Flag"
  1161.     When byte pointed to is zero, DOS is supposed to be
  1162.     safe to interrupt. NOT RELIABLE according to Chris
  1163.     Dunford.
  1164.        Examination of DOS 2.10 code in this area
  1165.     indicates that the byte immediately FOLLOWING this
  1166.     "Critical Section Flag" must be 00 to permit the
  1167.     PRINT.COM interrupt to be called. This suggests that
  1168.     checking the WORD pointed to, rather than the BYTE,
  1169.     might increase reliability of the test greatly.
  1170.  -----------------------------------------------------------
  1171.  INT 21 - Get Interrupt Vector (MSDOS generic)
  1172.     REG AH = 35H
  1173.     Reg AL = INT number
  1174.     On Return:
  1175.        Reg ES = Segment address of INT vector
  1176.        Reg BX = Offset address of INT vector
  1177.  -----------------------------------------------------------
  1178.  INT 21 - DISK SPACE (MSDOS generic)
  1179.     REG AH = 36H
  1180.     REG DL = DRIVE NUMBER (1-4)
  1181.     ON RETURN:
  1182.        REG AX = ? (SIDES)
  1183.        REG BX = ? (BLOCKS FREE)
  1184.        REG CX = ? (BLOCK SIZE)
  1185.        REG DX = ? (TOTAL BLOCKS)
  1186.     NOTE: MULT AX x CX x BX for FREE SPACE ON DISK
  1187.    MULT AX x CX x DX for TOTAL DISK SPACE
  1188.  -----------------------------------------------------------
  1189.  INT 21 - Internal - multifunction (MSDOS generic)
  1190.     AH=37h
  1191.     AL=0    Read switch character (returns current character in DL)
  1192.        1    Set switch character (specify new character in DL)
  1193.        2    Read device availability (as set by function AL=3)
  1194.        3    Set device availability, where:
  1195.         DL=0 means /DEV/ must preceed device names
  1196.         DL#0 means /DEV/ need not preceed device names
  1197.  
  1198.     Returns:
  1199.  
  1200.     DL =    Switch character (if AL=0 or 1)
  1201.         Device availability flag (if AL=2 or 3)
  1202.  
  1203.     Error return:    
  1204.  
  1205.     AL=0FFh means the value in AL was not in the range 0-3.
  1206.  
  1207.     Note:
  1208.  
  1209.     Functions 2 & 3 appear not to be implemented for dos 3.x
  1210.  -----------------------------------------------------------
  1211.  INT 21 - Get Country-Dependent Information (MSDOS generic)
  1212.     REG AH = 38H
  1213.     Complex and differs between Dos 2.x and Dos 3.x
  1214.     See Peter Norton "Programmer's Guide to the IBM PC", p. 305 
  1215.  -----------------------------------------------------------
  1216.  INT 21 - CREATE A SUBDIRECTORY (MSDOS generic)
  1217.     REG AH = 39H
  1218.     Reg DS = SEGMENT address of ASCIIZ pathname
  1219.     Reg DX = OFFSET address of ASCIIZ pathname
  1220.     On Return:
  1221.        Flag CF = 0 = SUCCESSFUL
  1222.          1 = ERROR
  1223.        Reg AX = Error Code if any
  1224.  -----------------------------------------------------------
  1225.  INT 21 - REMOVE A DIRECTORY ENTRY (MSDOS generic)
  1226.     REG AH = 3AH
  1227.     Reg DS = SEGMENT address of ASCIIZ pathname
  1228.     Reg DX = OFFSET address of ASCIIZ pathname
  1229.     On Return:
  1230.        Flag CF = 0 = SUCCESSFUL
  1231.          1 = ERROR
  1232.        Reg AX = Error Code if any
  1233.  -----------------------------------------------------------
  1234.  INT 21 - CHANGE THE CURRENT DIRECTORY (MSDOS generic)
  1235.     REG AH = 3BH
  1236.     Reg DS = SEGMENT address of ASCIIZ
  1237.     Reg DX = OFFSET address of ASCIIZ
  1238.     On Return:
  1239.        Flag CF = 0 = SUCCESSFUL
  1240.          1 = ERROR
  1241.        Reg AX = Error Code if any
  1242.  -----------------------------------------------------------
  1243.  INT 21 - CREATE A FILE WITH HANDLE (MSDOS generic)
  1244.     REG AH = 3CH
  1245.     REG CX = ATTRIBUTES FOR FILE
  1246.     REG DS = SEGMENT ADDRESS OF ASCIIZ
  1247.     REG DX = OFFSET ADDRESS OF ASCIIZ
  1248.     ON RETURN:
  1249.        FLAG CF = 0 = SUCCESSFUL CREATION
  1250.          1 = ERROR
  1251.        REG AX = FILE HANDLE
  1252.          OR ERROR CODE
  1253.  -----------------------------------------------------------
  1254.  INT 21 - OPEN DISK FILE WITH HANDLE (MSDOS generic)
  1255.     REG AH = 3DH
  1256.     REG AL = ACCESS CODE
  1257.        0 = Read Only
  1258.        1 = Write Only
  1259.        2 = Read/Write
  1260.     REG DS = SEGMENT ADDRESS OF ASCIIZ
  1261.     REG DX = OFFSET ADDRESS OF ASCIIZ
  1262.     ON RETURN:
  1263.        FLAG CF = 0 = SUCCESSFUL OPENING
  1264.          1 = ERROR
  1265.        REG AX  = FILE HANDLE
  1266.      OR ERROR CODE
  1267.  -----------------------------------------------------------
  1268.  INT 21 - CLOSE A FILE WITH HANDLE (MSDOS generic)
  1269.     REG AH = 3EH
  1270.     REG BX = FILE HANDLE
  1271.     ON RETURN:
  1272.        FLAG CF = 0 = SUCCESSFUL CLOSE
  1273.          1 = ERROR
  1274.        REG AX  = ERROR CODE IF ERROR
  1275.  -----------------------------------------------------------
  1276.  INT 21 - READ FROM FILE WITH HANDLE (MSDOS generic)
  1277.     REG AH = 3FH
  1278.     REG BX = FILE HANDLE
  1279.     REG CX = NO. OF BYTES TO READ
  1280.     REG DS = SEGMENT ADDRESS OF BUFFER
  1281.     REG DX = OFFSET ADDRESS OF BUFFER
  1282.     ON RETURN:
  1283.        FLAG CF = 0 = SUCCESSFUL READ
  1284.          1 = ERROR
  1285.        REG AX = 0 = END OF FILE
  1286.         OR NO. OF BYTES READ
  1287.         OR ERROR CODE
  1288.  -----------------------------------------------------------
  1289.  INT 21 - WRITE TO FILE WITH HANDLE (MSDOS generic)
  1290.     REG AH = 40H
  1291.     REG BX = FILE HANDLE
  1292.     REG CX = NO. OF BYTES TO Write
  1293.     REG DS = SEGMENT ADDRESS OF BUFFER
  1294.     REG DX = OFFSET ADDRESS OF BUFFER
  1295.     ON RETURN:
  1296.        FLAG CF = 0 = SUCCESSFUL WRITE
  1297.          1 = ERROR
  1298.        REG AX =  NO. OF BYTES Writtten
  1299.      OR ERROR CODE
  1300.  -----------------------------------------------------------
  1301.  INT 21 - DELETE A FILE (MSDOS generic)
  1302.     REG AH = 41H
  1303.     REG DS = SEGMENT OF ASCIIZ TO DELETE
  1304.     REG DX = OFFSET OF ASCIIZ TO DELETE
  1305.     On Return:
  1306.        Flag CF = 0 = SUCCESSFUL
  1307.          1 = ERROR
  1308.        Reg AX = Error Code if any
  1309.  -----------------------------------------------------------
  1310.  INT 21 - MOVE FILE READ/WRITE POINTER (MSDOS generic)
  1311.     REG AH = 42H
  1312.     REG AL = METHOD VALUE
  1313.        0 = offset from beginning of file
  1314.        1 = offset from present location
  1315.        2 = offset from end of file
  1316.     REG BX = FILE HANDLE
  1317.     REG CX = BYTES OFFSET HIGH
  1318.     REG DX = BYTES OFFSET LOW
  1319.     ON RETURN:
  1320.        FLAG CF = 0 = SUCCESSFUL MOVE
  1321.          1 = ERROR
  1322.        REG DX = NEW LOC. OF R/W POINTER HIGH
  1323.        REG AX = NEW LOC. OF R/W POINTER LOW
  1324.            ERROR CODE IF ERROR
  1325.  -----------------------------------------------------------
  1326.  INT 21 - GET/PUT FILE ATTRIBUTES (MSDOS generic)
  1327.     REG AH = 43H
  1328.     REG AL = 0 = GET FILE ATTRIBUTES
  1329.          1 = PUT FILE ATTRIBUTES
  1330.     REG CX = FILE ATTRIBUTES ON PUT
  1331.         BIT 0 = READ ONLY
  1332.         1 = HIDDEN FILE
  1333.         2 = SYSTEM FILE
  1334.         3 = VOLUME LABEL
  1335.         4 = SUBDIRECTORY
  1336.         5 = WRITTEN SINCE BACKUP
  1337.     REG DX = POINTER TO FILE ASCIIZ FILE NAME
  1338.     ON RETURN:
  1339.        FLAG CF = SET IF ERROR
  1340.        REG AX = Error Code 1, 3, or 5
  1341.        REG CX = FILE ATTRIBUTES ON GET
  1342.  -----------------------------------------------------------
  1343.  INT 21 - IOCTL (MSDOS generic)
  1344.     REG AH = 44H
  1345.     Complex. See T2K manual pages 121-124
  1346.  -----------------------------------------------------------
  1347.  INT 21 - Create Duplicate Handle (MSDOS generic)
  1348.     REG AH = 45H
  1349.     Reg BX = file handle to duplicate
  1350.     On Return:
  1351.        If carry set, AX = Error Code
  1352.        If carry clear, AX = duplicate handle
  1353.  -----------------------------------------------------------
  1354.  INT 21 - Force Duplicate Handle (MSDOS generic)
  1355.     REG AH = 46H
  1356.     Reg BX = Existing file handle
  1357.     Reg CX = new file handle
  1358.     On Return:
  1359.        If CF set, AX = Error Code
  1360.        If clear, both handles now refer to
  1361.           Existing file
  1362.  -----------------------------------------------------------
  1363.  INT 21 - Get Current Directory (MSDOS generic)
  1364.     REG AH = 47H
  1365.     Reg DL = drive (0=default, 1=A, etc.)
  1366.     DS:SI points to 64-byte buffer area
  1367.     On Return:
  1368.        If CY set, AX = Error Code
  1369.        Else DS:DI points to ASCIIZ name of
  1370.     current directory (not including drive ID)
  1371.  -----------------------------------------------------------
  1372.  INT 21 - Allocate Memory (MSDOS generic)
  1373.     REG AH = 48H
  1374.     Reg BX = number of 16-byte paragraphs desired
  1375.     On Return:
  1376.        If CF set:
  1377.           BX = Maximum number available
  1378.        If CF clear:
  1379.           AX = Segment address of allocated space
  1380.  -----------------------------------------------------------
  1381.  INT 21 - Free Memory (MSDOS generic)
  1382.     REG AH = 49H
  1383.     Reg ES = Segment address of area to be freed
  1384.     On Return:
  1385.        If CF set, AX = Error Code
  1386.  -----------------------------------------------------------
  1387.  INT 21 - Adjust Block Size (MSDOS generic)
  1388.     REG AH = 4AH
  1389.     Reg ES = Segment address of block to change
  1390.     Reg BX = New size in paragraphs
  1391.     On Return:
  1392.        If CF set, BX = max number available
  1393.        Else operation was successful
  1394.  -----------------------------------------------------------
  1395.  INT 21 - Load or Execute (MSDOS generic)
  1396.     REG AH = 4BH
  1397.     Complex. See T2K manual pages 131-133
  1398.  -----------------------------------------------------------
  1399.  INT 21 - Quit With Exit Code (MSDOS generic)
  1400.     REG AH = 4CH
  1401.     Reg AL = exit code
  1402.     Does not return. Control passes to DOS
  1403.  -----------------------------------------------------------
  1404.  INT 21 - GET EXIT CODE OF SUBPROGRAM (MSDOS generic)
  1405.     REG AH = 4DH
  1406.     On Return:
  1407.     AL = exit code of subprogram (FNs 31H or 4cH)
  1408.     AH = circumstance which caused termination
  1409.         0 = Terminate/abort
  1410.         1 = Control-C
  1411.         2 = Hard error
  1412.         3 = Terminate and stay resident
  1413.  -----------------------------------------------------------
  1414.  INT 21 - Find First ASCIIZ (MSDOS generic)
  1415.     REG AH = 4EH
  1416.     CX = SEARCH ATTRIBUTES
  1417.     DS:DX = POINTER TO ASCIIZ FILENAME (WITH ATTRIBUTES)
  1418.     ON RETURN:
  1419.     IF CF SET, REG AX = ERROR CODE
  1420.          ELSE, DATA BLOCK WRITTEN AT CURRENT DTA
  1421.  -----------------------------------------------------------
  1422.  INT 21 - Find Next ASCIIZ (MSDOS generic)
  1423.     REG AH = 4FH
  1424.     ON RETURN:
  1425.     IF CF SET, AX = ERROR CODE
  1426.          ELSE, DATA BLOCK WRITTEN AT CURRENT DTA
  1427.  -----------------------------------------------------------
  1428.  INT 21 - Internal - Set PSP Segment (MSDOS generic)
  1429.     REG AH = 50H
  1430.     Reg BX = Segment address of new PSP
  1431.     On Return:
  1432.        No return codes
  1433.  -----------------------------------------------------------
  1434.  INT 21 - Internal - Get PSP Segment (MSDOS generic)
  1435.     REG AH = 51H
  1436.     On Return:
  1437.        BX = Current PSP Segment
  1438.  -----------------------------------------------------------
  1439.  INT 21 - Internal - Unknown (MSDOS generic)
  1440.     REG AH = 52H
  1441.     On Return:
  1442.        Unknown pointer in ES:BX
  1443.  -----------------------------------------------------------
  1444.  INT 21 - Internal - Unknown (MSDOS generic)
  1445.     REG AH = 53H
  1446.     On Return:
  1447.        Unknown
  1448.  -----------------------------------------------------------
  1449.  INT 21 - Get Verify Flag (MSDOS generic)
  1450.     REG AH = 54H
  1451.     On Return:
  1452.        AL = 0 if flag OFF
  1453.        AL = 1 if flag ON
  1454.  -----------------------------------------------------------
  1455.  INT 21 - Internal - Create PSP (MSDOS generic)
  1456.     REG AH = 55H
  1457.     Like FN 26H but creates "child" PSP rather
  1458.     than copying existing one.
  1459.  -----------------------------------------------------------
  1460.  INT 21 - RENAME A FILE (MSDOS generic)
  1461.     REG AH = 56H
  1462.     REG DS = SEGMENT OF ASCIIZ OLD NAME
  1463.     REG DX = OFFSET OF ASCIIZ OLD NAME
  1464.     REG ES = SEGMENT OF ASCIIZ NEW NAME
  1465.     REG DI = OFFSET OF ASCIIZ NEW NAME
  1466.     ON RETURN:
  1467.        FLAG CF = CLEARED = SUCCESSFULL RENAME
  1468.      SET = ERROR &
  1469.      REG AX = ERROR CODE
  1470.  -----------------------------------------------------------
  1471.  INT 21 - Get/Put Date/Time (MSDOS generic)
  1472.     REG AH = 57H
  1473.     AL = FUNCTION CODE
  1474.         0 = GET DATE AND TIME
  1475.         1 = SET DATE AND TIME
  1476.     BX = FILE HANDLE
  1477.     CX = TIME TO BE SET (IF AL = 1)
  1478.     DX = DATE TO BE SET (IF AL = 1)
  1479.     ON RETURN:
  1480.     IF CF SET:
  1481.         REG AX = ERROR CODE
  1482.     IF CF NOT SET:
  1483.         REG CX = TIME OF LAST WRITE (IF AL = 0)
  1484.             DX = DATE OF LAST WRITE (IF AL = 0)
  1485.  -----------------------------------------------------------
  1486.  INT 21 - GET EXTENDED ERROR CODE (DOS 3.X generic)
  1487.     REG AH = 59H
  1488.     BX = VERSION CODE (0000 FOR DOS 3.0)
  1489.     ON RETURN:
  1490.     REG AX = EXTENDED ERROR CODE
  1491.         BH = CLASS OF ERROR
  1492.         BL = SUGGESTED ACTION CODE
  1493.         CH = LOCUS (WHERE ERROR OCCURRED)
  1494.  -----------------------------------------------------------
  1495.  INT 21 - CREATE TMEPORARY FILE (DOS 3.x generic)
  1496.     REG AH = 5AH
  1497.     DS:DX = POINTER TO DIRECTORY PATH NAME
  1498.     CX = FILE ATTRIBUTE
  1499.     ON RETURN:
  1500.     REG AX = ERROR CODE (IF CF SET)
  1501.         DS:DX = PATH NAME (IF CF NOT SET)
  1502.  
  1503.  NOTE: THE FILE CREATED IS NOT TRULY "TEMPORARY". IT MUST BE
  1504.  REMOVED BY THE USER.
  1505.  -----------------------------------------------------------
  1506.  INT 21 - CREATE NEW FILE (DOS 3.x generic)
  1507.    REG AH = 5BH
  1508.     DS:DX = POINTER TO DIRECTORY PATH NAME
  1509.     CX = FILE ATTRIBUTE
  1510.     ON RETURN:
  1511.     REG AX = ERROR CODE (IF CF SET)
  1512.         DS:DX = PATH NAME (IF CF NOT SET)
  1513.  
  1514.  NOTE: UNLIKE FUNCTION 3CH, FUNCTION 5BH WILL FAIL IF THE
  1515.  ALREADY EXISTS.
  1516.  -----------------------------------------------------------
  1517.  INT 21 - LOCK/UNLOCK FILE ACCESS (DOS 3.x generic)
  1518.     REG AH = 5CH
  1519.     AL = 0 IF LOCK
  1520.          1 IF UNLOCK
  1521.     BX = FILE HANDLE
  1522.     CX:DX = OFFSET TO LOCK
  1523.     SI:DI = AMOUNT TO LOCK
  1524.     ON RETURN:
  1525.     REG AX = ERROR CODE (IF CF SET)
  1526.  -----------------------------------------------------------
  1527.  INT 21 - GET PSP ADDRESS (DOS 3.x generic)
  1528.     REG AH = 62H
  1529.     ON RETURN:
  1530.     REG BX = SEGMENT ADDRESS OF PSP
  1531.  -----------------------------------------------------------
  1532.  INT 22 - TERMINATE ADDRESS (MSDOS generic)
  1533.     FAR (DWORD) address of routine to be executed
  1534.  when program "returns to DOS". Should NOT ever be called.
  1535.  -----------------------------------------------------------
  1536.  INT 23 - CONTROL "C" EXIT ADDRESS (MSDOS generic)
  1537.     Automatically called from keyboard scanner when
  1538.  CTRL-C or CTRL-BREAK is detected. Normally aborts program
  1539.  and returns to DOS, but may be changed.
  1540.  -----------------------------------------------------------
  1541.  INT 24 - FATAL ERROR ABORT ADDRESS (MSDOS generic)
  1542.     Automatically called upon detection of unrecoverable
  1543.  disk error. Normally prints "Abort, Retry, or Ignore?" message
  1544.  and takes the reply, but may be changed if desired.
  1545.  -----------------------------------------------------------
  1546.  INT 25 - ABSOLUTE DISK READ (MSDOS generic)
  1547.     Similar to INT 13 function, but this one is generic
  1548.  for all MSDOS rather than being machine specific.
  1549.     ENTRY CONDITIONS:
  1550.     AL = Drive number (0=A, 1=B, etc)
  1551.     DS:BX = Disk Transfer Address (buffer)
  1552.     CX = Number of sectors to read
  1553.     DX = First relative sector to read. 0 reads boot
  1554.          sector, 1 reads FAT, etc.
  1555.     EXIT:
  1556.     If carry set, AL=error code.
  1557.     If carry not set, operation successful.
  1558.     NOTE:  This routine PUSHes the flags onto the stack when it
  1559.     is called, and does NOT remove them at exit. Be sure
  1560.     to POP the stack immediately after returning, to
  1561.     prevent overflow. All of the registers, not just
  1562.     those listed, are changed by the routine.
  1563.  -----------------------------------------------------------
  1564.  INT 26 - ABSOLUTE DISK WRITE (MSDOS generic)
  1565.     All parameters and conditions are the same as for
  1566.     INT 25, except that this routine WRITES to the disk
  1567.     rather than READing from it. Note that it does NOT
  1568.     update the FAT, directories, etc., and can easily
  1569.     destroy a disk unless carefully used.
  1570.  -----------------------------------------------------------
  1571.  INT 27 - TERMINATE BUT STAY RESIDENT (MSDOS generic)
  1572.     REG CS = CURRENT PROGRAM SEGMENT
  1573.     REG DX = LAST PROGRAM BYTE + 1
  1574.     NOTE:     RETURN IS TO DOS
  1575.  -----------------------------------------------------------
  1576.  INT 28 - Internal routine for MSDOS
  1577.     This interrupt is called from inside the "get input
  1578.  from keyboard" routine in DOS, if and only if it is safe to use
  1579.  INT 21 to access the disk at that time. It is used primarily by
  1580.  the PRINT.COM routines, but any number of other routines could
  1581.  be chained to it by saving the original vector, and calling it
  1582.  with a FAR call (or just JMPing to it) at the end of the new
  1583.  routine.
  1584.     Until PRINT.COM installs its own routine, this
  1585.  interrupt vector simply points to an IRET opcode.
  1586.  -----------------------------------------------------------
  1587.  INT 29 - Internal routine for MSDOS
  1588.     This interrupt is called from the DOS output routines
  1589.  if output is going to a device rather than a file, and the
  1590.  device driver's attribute word has bit 3 (04H) set to "1".
  1591.  Nothing more is known about it at this time.
  1592.  -----------------------------------------------------------
  1593.  INT 2E - UNKNOWN
  1594.  -----------------------------------------------------------
  1595.  INT 30 - UNKNOWN
  1596.  -----------------------------------------------------------
  1597.  INT 31 - UNKNOWN
  1598.  -----------------------------------------------------------
  1599.  INT F8 - INTERVAL TIMER (10 MSEC)
  1600.     PARAMETERS UNKNOWN
  1601.  -----------------------------------------------------------
  1602.  INT FA - USART READY (RS-232C)
  1603.     PARAMETERS UNKNOWN
  1604.  -----------------------------------------------------------
  1605.  INT FB - USART Rx READY (keyboard)
  1606.     PARAMETERS UNKNOWN
  1607.  -----------------------------------------------------------
  1608.  
  1609.  
  1610.  
  1611. -- 
  1612. ------------------------------------------------------------------
  1613. Ross M. Greenberg  @ Time Inc, New York 
  1614.               --------->{vax135 | ihnp4}!timeinc!greenber<---------
  1615.